<?php
    /*
Autor: Jonathan Vindas Abarca
Fecha: 23/08/2012
Descripción: Este archivo contiene la declaración de funciones para obtener datos de la tabla de 
lineas detalle de la base de datos SQL Server.
Bitacora de modificaciones:
<
	Autor: Jordan Campos Delagado
    Fecha: 25/10/2013
    Descripción: Se corrigió los dos métodos donde se calcula la cantidad disponible de artículos, 
	los métodos son: sumatoriaCantidadesMismoArticulo y obtenerQTY los cuales se encuentran en el archivo 
	lineaDetallesModelo.php y el método mostrarDetalleOrdenCompra dentro del archivo ajaxControlador.php. 
	Incidente: INC0068-Problema con disponible en guias jcamposd
>
<
    Autor: 
    Fecha: 
    Descripción: 
>
*/      

    /*Funcion para agregar LineaDetalle*/
    function agregarLineaDetalle($NumOrden,$Articulo,$CodGuia,$Embalaje,$Cant, $numeroLinea)            
    {        
        require_once 'dataModelo.php';
        $conexion=conexion();
        //$insert="Insert into LineaDetalles (NumOrden,Articulo,CodGuia,Embalaje,Cant) values('$NumOrden','$Articulo','$CodGuia','$Embalaje','$Cant')";        
        $insert="exec SP001AgregarLineaDetalle '$NumOrden','$Articulo','$CodGuia','$Embalaje','$Cant', '$numeroLinea'";
        if (!odbc_exec($conexion,$insert))
        {
            die('Error: ' . odbc_error());
        }
        odbc_close($conexion);
    }
    
    /*Funcion para modificar LineaDetalle*/
    function modificarLineaDetalle($NumOrden,$Articulo,$CodGuia,$Embalaje,$Cant, $numeroLinea)
    {
        require_once 'dataModelo.php';
        $conexion=conexion();        
        /*$update="UPDATE LineaDetalles
        SET Cant = '$Cant'
        WHERE NumOrden = '$NumOrden'
        AND Articulo = '$Articulo'
        AND CodGuia = '$CodGuia'
        AND Embalaje = '$Embalaje'";*/
        $update="exec SP002ModificarLineaDetalle '$NumOrden','$Articulo','$CodGuia','$Embalaje','$Cant', '$numeroLinea'";
        if (!odbc_exec($conexion,$update))
        {
            die('Error: ' . odbc_error());
        }
        odbc_close($conexion);
    }

    /*Función para Eliminar LineaDetalle*/
    function eliminarLineaDetalleControlador($NumOrden,$Articulo,$CodGuia,$embalaje,$numeroLinea)
    {
        require_once 'dataModelo.php';
        $conexion=conexion();
        //$update="delete from LineaDetalles where NumOrden ='$NumOrden' and Articulo='$Articulo' and CodGuia='$CodGuia' and Embalaje='$embalaje'";
        $update="exec SP003EliminarLineaDetalleControlador '$NumOrden','$Articulo','$CodGuia','$embalaje', '$numeroLinea'";
        if (!odbc_exec($conexion,$update))
        {
            die('Error: ' . odbc_error());
        }
        odbc_close($conexion);
    }      
    
    /*Función para Buscar Todos NumOrden LineaDetalles*/
    function buscarTodosNumOrdenLineaDetalles()
    {        
        require_once 'dataModelo.php';
        $conexion=conexion();    
        $select="exec SP004BuscarTodosNumOrdenLineaDetalles";
        //$rs = odbc_exec($conexion, "SELECT NumOrden FROM LineaDetalles");
        $rs = odbc_exec($conexion, $select);
        $items=Array();
        while (odbc_fetch_row($rs))
        {
            $item['NumOrden']=odbc_result($rs,"NumOrden");                
            array_push($items,$item);
        }
        odbc_close($conexion);
        return $items;
    }
        
    /*Función para Buscar Embalajes por LineaDetalles*/
    function encontrarLineaDetalles($numOrden, $numArticulo, $codGuia, $embalaje)
    {
        require_once 'dataModelo.php';      
        $existe=false;       
        $conexion=conexion();
        $select="exec SP005EncontrarLineaDetalles '$numOrden','$numArticulo','$codGuia','$embalaje'";
        //$rs = odbc_exec($conexion,  "SELECT numorden, articulo, codguia, embalaje, cant FROM LineaDetalles where NumOrden='".$numOrden."' and Articulo='".$numArticulo."' and CodGuia='" .$codGuia."' and Embalaje='".$embalaje."'");       
        $rs = odbc_exec($conexion,$select);       
        $items=Array();
        if (!$conexion) 
        {           
           exit( "Error al conectar: " . $conexion);
        }
        else
        {        
            $existe=odbc_fetch_row($rs);             
        }       
        odbc_close($conexion);
        return $existe;
    }
    
    /*Funcion para buscar todas las lineas detalles*/
    function buscarXGuiaEmbalaje($guia,$embalaje, $numeroLinea)
    {
        require_once 'dataModelo.php';
        $conexion=conexion();        
        /*Seleccionar campo de numero de linea*/
        $select="exec SP006BuscarXGuiaEmbalaje '$guia','$embalaje',$numeroLinea";
        $rs = odbc_exec($conexion, $select);
        $items=Array();
        while (odbc_fetch_row($rs))
        {
            $item['NumOrden']=odbc_result($rs,"NumOrden");
            $item['Articulo']=odbc_result($rs,"Articulo");
            $item['CodGuia']=odbc_result($rs,"CodGuia");
            $item['Embalaje']=odbc_result($rs,"Embalaje");
            $item['Cant']=odbc_result($rs,"Cant");
            $item['Tipo']=odbc_result($rs,"Tipo");
            $item['NAME']=odbc_result($rs,"NAME");
            $item['numeroLinea']=odbc_result($rs,"numeroLinea");
            array_push($items,$item);
        }
        odbc_close($conexion);
        return $items;
    }
    
    function listarArticulosConDisponibles($guia,$embalaje,$numeroLinea)
    {
        //require_once 'dataModelo.php';
        //$conexion=conexion();
        $detalles=buscarXGuiaEmbalaje($guia,$embalaje,$numeroLinea);
        $items=Array();
        foreach ($detalles as $detalle) 
        {                
            $item['NumOrden']=$detalle['NumOrden'];
            $item['Articulo']=$detalle['Articulo'];
            $item['CodGuia']=$detalle['CodGuia'];
            $item['Embalaje']=$detalle['Embalaje'];
            $item['Cant']=$detalle['Cant'];
            $item['Tipo']=$detalle['Tipo'];
            $item['NAME']=$detalle['NAME'];
            $item['numeroLinea']=$detalle['numeroLinea'];
            $item['cantidadDisponible']=obtenerQTY($detalle['NumOrden'],$detalle['Articulo'],1000)-sumatoriaCantidadesMismoArticulo($detalle['NumOrden'],$detalle['Articulo'],1000);                
            array_push($items,$item);
        }        
        return $items;
    }
        
    /*Funcion para obtener la cantidad de las lineas detalle*/
    function obtenerCantidadSolicitadasLineasDetalle($codigoOrden,$codigoArticulo)
    {
        require_once 'dataModelo.php';
        $conexion=conexion();
        $select = "select cant from LineaDetalles
        where NumOrden='$codigoOrden' and Articulo='$codigoArticulo'";        
        //$select="exec SP007ObtenerCantidadSolicitadasLineasDetalle '$codigoOrden', '$codigoArticulo' ";
        $rs = odbc_exec($conexion, $select);
        $items=Array();
        while (odbc_fetch_row($rs))
        {
            $item['cant']=odbc_result($rs,"cant");                
            array_push($items,$item);
        }
        odbc_close($conexion);
        return $items;
    }
    
    function sumatoriaCantidadesMismoArticulo($codigoOrden,$codigoArticulo,$i)
    {        
        $items=obtenerCantidadSolicitadasLineasDetalle($codigoOrden,$codigoArticulo);
        $acumulador=0;
		//INC0068-Problema con disponible en guias jcamposd
		$count =0;
        foreach ($items as $detalle) 
        {	
			if($count <= $i)
            {
				$acumulador=$acumulador+$detalle['cant'];
				$count++;
			}	
        }
		//INC0068-Problema con disponible en guias jcamposd
        return $acumulador;
    }
    
    function obtenerQTY($codigoOrden,$codigoArticulo,$i)
    {            
        $ordenes=obtenerCantidadOrdenSeleccionada($codigoOrden,$codigoArticulo);
        $acumulador=0;
		//INC0068-Problema con disponible en guias jcamposd
		$count =0;
        foreach ($ordenes as $detalle) 
        {	
			if($count <= $i)
            {
				$acumulador=$detalle['purchqty'];
				$count++;
			}	
        }
		//INC0068-Problema con disponible en guias jcamposd
        return $acumulador;
    }
        
    /*Funcion para obtener la cantidad de articulos para la linea detalle*/
    function obtenerCantidadOrdenSeleccionada($codigoOrden, $codigoArticulo) 
    {        
        require_once 'dataModelo.php';    
        $conexion=conexion_AX();
        //$select="exec SP008ObtenerCantidadOrdenSeleccionada '$codigoOrden', '$codigoArticulo'";
        $rs = odbc_exec($conexion, "select purchqty from purchline where Purchid='$codigoOrden' and itemid='$codigoArticulo'");
        //$rs = odbc_exec($conexion, $select);
        $ordenes=Array();
        while (odbc_fetch_row($rs))
        {
            $orden['purchqty']=odbc_result($rs,"purchqty");        
            array_push($ordenes,$orden);
        }        
        odbc_close($conexion);
        return $ordenes;
    }

    /*Funcion para encontrar repetidos, retorna true si existe un registro con el mismo numero de Orden, 
    numero de articulo, codigo de Guia y codigo de embalaje*/    
    function encontrarLineaDetalleDuplicada($codigoOrden, $codigoArticulo, $codigoGuia, $codigoEmbalaje, $numeroLinea)
    {      
        require_once 'dataModelo.php';
        $conexion=conexion();
        $existe=false;        
        $select="exec SP009EncontrarLineaDetalleDuplicada '$codigoOrden','$codigoArticulo','$codigoGuia','$codigoEmbalaje', '$numeroLinea'";
        //$rs = odbc_exec($conexion,  "select NumOrden, Articulo, CodGuia, Embalaje from lineaDetalles where NumOrden='".$codigoOrden."' and Articulo='".$codigoArticulo."' and CodGuia='".$codigoGuia."' and Embalaje='".$codigoEmbalaje."'");          
        $rs = odbc_exec($conexion,  $select);          
        if (!$conexion) 
        {           
            exit( "Error al conectar: " . $conexion);
        }
        else
        {            
            $existe=odbc_fetch_row($rs);             
        }            
        odbc_close($conexion);
        return $existe;
    }
    
    /*Función retorna una linea detalle especifica*/
    function encontrarLineaDetalle($codigoOrden, $codigoArticulo, $codigoGuia, $codigoEmbalaje)
    {
        require_once 'dataModelo.php';
        //require_once('FirePHPCore/FirePHP.class.php');
        //$firephp = FirePHP::getInstance(true);
        $conexion=conexion();
        $select="exec SP0010EncontrarLineaDetalle '$codigoOrden', '$codigoArticulo', '$codigoGuia', '$codigoEmbalaje'";
        //$rs = odbc_exec($conexion, "select NumOrden, Articulo, CodGuia, Embalaje, Cant from lineaDetalles where NumOrden='".$codigoOrden."' and Articulo='".$codigoArticulo."' and CodGuia='".$codigoGuia."' and Embalaje='".$codigoEmbalaje."'");                  
        $rs = odbc_exec($conexion, $select);                  
        $items=Array();
        while (odbc_fetch_row($rs))
        {
            $item['NumOrden']=odbc_result($rs,"NumOrden");
            $item['Articulo']=odbc_result($rs,"Articulo");
            $item['CodGuia']=odbc_result($rs,"CodGuia");
            $item['Embalaje']=odbc_result($rs,"Embalaje");
            $item['Cant']=odbc_result($rs,"Cant");                
            array_push($items,$item);
        }
        odbc_close($conexion);
        return $items;
    } 
?>
